package com.chinacoal.microservice.mq;

import com.chinacoal.microservice.pojo.Message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;

/**
 * @Description: 发送延时消息方法
 * @author: 朱亮
 * @date: 2021年03月26日 9:48
 */
@Slf4j
@Component
public class MessageSend {

    private static int delay = 30;

    @Resource
    private RedisMQ redisMQ;

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    //改造成redis
    public void sendMessage(Message message) {
        log.info("------------------开始发送延时消息------------------");
        try {
            // 将有效信息放入消息队列和消息池中
            // 可以添加延迟配置
            message.setDelay(delay*1000);
            message.setCreateTime(System.currentTimeMillis());
            // 设置消息池ttl，防止长期占用
            message.setTtl(delay + 360);
            redisMQ.addMsgPool(message);
            //当前时间加上延时的时间，作为score
            Long delayTime = message.getCreateTime() + message.getDelay();
            String d = sdf.format(message.getCreateTime());
            System.out.println("当前时间：" + d+",消费的时间：" + sdf.format(delayTime));
            redisMQ.enMessage(RedisMQ.QUEUE_NAME,delayTime, message.getId());
            log.info("------------------结束发送延时消息------------------");
        }catch (Exception e){
            log.info("------------------发送延时消息异常------------------");
        }
    }
}
